[INV-MIGRATION-115] Создать таблицу TBD
Создание таблиц хранения чеков, остатков инвентаря и логов PMA
NoteКраткая карточка задачи
- Репозиторий / Компонент:
billing-service/fridge-service/bupar-audit-service(Базыbilling_db,fridge_db,bupar_db). - Целевая СУБД: PostgreSQL v15+.
- Ссылка на Метод: Конфигурация кэша безопасности IAD
- Статус: Готово к реализации
- Инструкция по шагам: Выполнить DDL-миграцию для развертывания физического слоя хранения структурированных данных расходов во всех трех изолированных целевых контурах.
-- 1. Скрипт миграции для billing_db (Контур Финансов и Чеков)
CREATE TABLE IF NOT EXISTS billing_db.user_expenses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
trace_id VARCHAR(128) NOT NULL,
user_id VARCHAR(64) NOT NULL,
total_amount NUMERIC(12, 2) NOT NULL,
currency VARCHAR(3) DEFAULT 'RUB',
purchased_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS billing_db.expense_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
expense_id UUID REFERENCES billing_db.user_expenses(id) ON DELETE CASCADE,
product_name TEXT NOT NULL,
price NUMERIC(12, 2) NOT NULL,
quantity NUMERIC(10, 3) NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_expenses_user ON billing_db.user_expenses(user_id);
-- 2. Скрипт миграции для fridge_db (Контур Холодильника / СУБД INVENTORY)
-- В соответствии с манифестом, таблицы логов готовки, списания и остатков лежат внутри fridge_db
CREATE TABLE IF NOT EXISTS fridge_db.fridge_inventory (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
home_group_id VARCHAR(64) NOT NULL,
food_element_id VARCHAR(64) NOT NULL,
quantity NUMERIC(10, 3) NOT NULL, -- Объем в литрах/граммах
trace_id VARCHAR(128) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Индекс BTREE под стратегию FIFO-вычетов (created_at ASC) и быструю выборку группы
CREATE INDEX IF NOT EXISTS idx_fridge_fifo
ON fridge_db.fridge_inventory (home_group_id, created_at ASC);
-- 3. Скрипт миграции для bupar_db (Контур Сквозного Анализа Процессов PMA)
CREATE TABLE IF NOT EXISTS bupar_db.bupar_event_logs (
id BIGSERIAL PRIMARY KEY,
case_id VARCHAR(128) NOT NULL, -- Сквозной идентификатор цепочки
event_type VARCHAR(64) NOT NULL, -- 'PRODUCT_BATCH_PURCHASED', etc.
timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
trace_id VARCHAR(128) NOT NULL,
payload JSONB NOT NULL
);
-- Индекс на case_id обязателен в соответствии с требованиями манифеста
CREATE INDEX IF NOT EXISTS idx_bupar_case_id ON bupar_db.bupar_event_logs(case_id);